{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pylab as pl"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 图像处理-ndimage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 形态学图像处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def expand_image(img, value, out=None, size = 10):\n",
    "    if out is None:\n",
    "        w, h = img.shape\n",
    "        out = np.zeros((w*size, h*size),dtype=np.uint8)\n",
    "    \n",
    "    tmp = np.repeat(np.repeat(img,size,0),size,1)\n",
    "    out[:,:] = np.where(tmp, value, out)\n",
    "    out[::size,:] = 0\n",
    "    out[:,::size] = 0\n",
    "    return out\n",
    "    \n",
    "def show_image(*imgs): \n",
    "    for idx, img in enumerate(imgs, 1):\n",
    "        ax = pl.subplot(1, len(imgs), idx)\n",
    "        pl.imshow(img, cmap=\"gray\")   \n",
    "        ax.set_axis_off()    \n",
    "    pl.subplots_adjust(0.02, 0, 0.98, 1, 0.02, 0)        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 膨胀和腐蚀"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAACrCAYAAAA5DaaIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAABJ5JREFUeJzt3cGO1EYARVE74mfhg/hds4haYRFw+eJxVzHnbLGEmZR0p1uql/04jg0AuO6fd78AAKxKRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYDoy7tfYNu2bd93s0n81nEc+7Y5K5x7nZVtc1449/N5KXwSBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEg+vLuFwD+8/3799/++bdv3257hrk9eRacqc4nUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgGg/juPd77Dt+/7+l2Bqx3Hs2+ascO51VrbNeeHcz+elMLbwgLNfVPZ9v+0Z5jVyWf3Js+Ly/NyclzX4OhcAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIjC0APOhstGDbPu9wwYp8EgWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFACi/ez/aP7IS+z7+1+CqR3HsW+bs8K511nZNueFcz+fl8Ji0R86+yVk3/dHn+F5ows0s52Vs/e2mvMx/ubz8hnPlK9zASASUQCIRBQAIhEFgEhEASASUQCIRBQAImMLLMHYAqOMLXCFsYU3e3IkwSDDnJ6+PD9yod0gw7ycl7+Lr3MBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiYwsswdgCo4wtcIWxhTd7ctzA2MKc7rw8P3JZ3eX5eY2chRHOyzp8nQsAkYgCQCSiABCJKABEIgoAkYgCQCSiABAZW2AJxhYYZWyBK4wtfJCRXy6eHjcwtvC8kcvzX79+PX3mzsvqLs/Py3n58/d5PbcKX+cCQCSiABCJKABEIgoAkYgCQCSiABCJKABExhZYgrEFRhlb4ApjCx9kxrGFEQYZ7rXq5fmZLti//r7V3TUk4Lz8XefF17kAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRsQWWYGyBUcYWuMLYQnDXLw6jl4tXfOYzuOOC+agZ/xu7PH+N8/LseRn5ec/A17kAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRsQWWYGyBUcYWuMLYQvD0hegnPXVp+vXcyma8PD/yTnc98/RZWeXy/K84L87L//F1LgBEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABBZLGIJFosYZbGIKywWBXeuiqzIYtG/nl6gmW2B5amVmtdzs/37r5rxvNz1M51p1ej13Crnxde5ABCJKABEIgoAkYgCQCSiABCJKABEIgoAkbEFlmBsgVHGFrjC2AJ8oLML36NmuRh+1R2X8F/Pre6un8WIO4cU7nLXIMPoeZnt3/8rvs4FgEhEASASUQCIRBQAIhEFgEhEASASUQCIjC2wBGMLjDK2wBV/OrbgkygARCIKAJGIAkAkogAQiSgARCIKAJGIAkAkogAQTTG2AAAr8kkUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEg+gFgXP5bp9QgQAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a649fb9b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=四连通和八连通的膨胀运算\n",
    "from scipy.ndimage import morphology\n",
    "\n",
    "def dilation_demo(a, structure=None):\n",
    "    b = morphology.binary_dilation(a, structure)\n",
    "    img = expand_image(a, 255)\n",
    "    return expand_image(np.logical_xor(a,b), 150, out=img)\n",
    "\n",
    "a = pl.imread(\"scipy_morphology_demo.png\")[:,:,0].astype(np.uint8)\n",
    "img1 = expand_image(a, 255)\n",
    "\n",
    "img2 = dilation_demo(a)\n",
    "img3 = dilation_demo(a, [[1,1,1],[1,1,1],[1,1,1]])\n",
    "show_image(img1, img2, img3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAACrCAYAAAA5DaaIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAABHBJREFUeJzt3dFq21gYRlGp9GWTB8rrai6KaQid6mhHkXWatW7HME77w44F/rpu27YAAMf9ePYbAIBZiSgARCIKAJGIAkAkogAQiSgARCIKAJGIAkAkogAQ/Xz2G1iWZVnX1WwSf7Vt27osboV9j1tZFvfCvvf3UvgkCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJA9PPZbwD47e3t7a///fX19bTXMD/38nw+iQJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAETrtm3Pfg/Luq7PfxPc2rZt67K4FfY9bmVZ3Av73t9LYWzhk0a+pLz3i8q6rqe9xpem53blrTA/9/J8HucCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkbEFuIghDI5wL3PwSRQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCI1r1/0fySN7Guz38T3Nq2beuyuBX2PW5lWdwL+97fS2Gx6H/srYUsy6/FkL1fQtZ1vfQ1Vk7uy61whHuZg8e5ABCJKABEIgoAkYgCQCSiABCJKABEIgoAkbEFpmBsgVHGFjjC2MIXuXpsYeSLzL40PbcZb4XnufLv0L10HucCQCSiABCJKABEIgoAkYgCQCSiABCJKABExhaYgrEFRhlb4AhjC1/kzLGFkS/HG1uY19W3MsKX5+/rzHs5i3vpPM4FgEhEASASUQCIRBQAIhEFgEhEASASUQCIjC0wBWMLjDK2wBHGFoKRLzu/vLzsvubMcQNjC/Ma+UX06i+ru5X7ci//Fo9zASASUQCIRBQAIhEFgEhEASASUQCIRBQAImMLTMHYAqOMLXCEsYXgjmMLI+40yPD4//3r7ngrdxvv4Df38v3uxeNcAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWAyNgCUzC2wChjCxxhbOGDM740PGr0y8UzvsbYwi9uxa0c4V6+3714nAsAkYgCQCSiABCJKABEIgoAkYgCQCSiABAZW2AKxhYYZWyBI4wtfHDHsYWR9zTiyn99fuTP6Myf7a7ueCtnvebqW/kOrr6XK7mXP/M4FwAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIgsFjEFi0WMsljEERaLPrh6sehuiz1XLdU8Xne3n/9sbuX7LdB8xpn3MqPveC8e5wJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAETGFpiCsQVGGVvgCGML8IX2BglGzTo6MTLIMPJnNOvPD3s8zgWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIiMLTAFYwuMMrbAEZ8dW/BJFAAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhuMbYAADPySRQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASD6D6CytlvaYSyFAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a649fb9278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=不同结构元素的膨胀效果\n",
    "img4 = dilation_demo(a, [[0,0,0],[1,1,1],[0,0,0]])\n",
    "img5 = dilation_demo(a, [[0,1,0],[0,1,0],[0,1,0]])\n",
    "img6 = dilation_demo(a, [[0,1,0],[0,1,0],[0,0,0]])\n",
    "show_image(img4, img5, img6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAACrCAYAAAA5DaaIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAABDRJREFUeJzt3cFu2kAARVG7yqfyV/Cv7qJCzQrGN45hknO2WBEqI12w5Nd127YFANjvz6vfAADMSkQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWA6OPVb2BZlmVdV7NJPLRt27oszgrP3c/KsjgvPPf5vBR+iQJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAJKIAEIkoAEQfr34Dv8G2bQ9fX9f1sGuY2+Vyefj67XY77Brm57y8nl+iABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQGRsASZzvV4fvu7BeD5zXr6XX6IAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRiAJAtG7b9ur3sKzr+vo3wVvbtm1dFmeF5+5nZVmcF577fF4Ki0Vf9OxLyLqup17D+7pcLg9fv91uQ5/xyN8ZuYb3dtTn7Lx8L7dzASASUQCIRBQAIhEFgEhEASASUQCIRBQAImMLTMHYAqOMLbCHsYUXO3MkwSDD3M586N0D9vNzXubgdi4ARCIKAJGIAkAkogAQiSgARCIKAJGIAkBkbIEpGFtglLEF9jC28GJnjhsYW5jbmQ+re3h+fs7LHNzOBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiIwtMAVjC4wytsAexha+yciXi7PHDYwtvKdnD6Evy/kPq3t4/n05Lz+L27kAEIkoAEQiCgCRiAJAJKIAEIkoAEQiCgCRsQWmYGyBUcYW2MPYwjd5x7GFEQYZzveOD8+P8ID9azgvP4vbuQAQiSgARCIKAJGIAkAkogAQiSgARCIKAJGxBaZgbIFRxhbYw9hCcNQXh9Hhghmv4Z+RB+Ov1+vTa0b/3Y96oH3kmqPeD/+NnJcRR37O73bNT+N2LgBEIgoAkYgCQCSiABCJKABEIgoAkYgCQGRsgSkYW2CUsQX2MLYQnD22cKazBhnu1/10R44tvNuD6GcNMtz/1m9w9tjCmc4aZLhfNwu3cwEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYDIYhFTsFjEKItF7GGxKDhysWhGFovGHblAM6PfuEDzFc7L7zsvbucCQCSiABCJKABEIgoAkYgCQCSiABCJKABExhaYgrEFRhlbYI+vji34JQoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoA0bpt/uN3ACj8EgWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWASEQBIBJRAIj+AiYQ7pr0+nUhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a64c92bda0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=四连通和八连通的腐蚀运算\n",
    "def erosion_demo(a, structure=None):\n",
    "    b = morphology.binary_erosion(a, structure)\n",
    "    img = expand_image(a, 255)\n",
    "    return expand_image(np.logical_xor(a,b), 100, out=img)\n",
    "\n",
    "img1 = expand_image(a, 255)\n",
    "img2 = erosion_demo(a)\n",
    "img3 = erosion_demo(a, [[1,1,1],[1,1,1],[1,1,1]])\n",
    "show_image(img1, img2, img3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Hit和Miss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAACrCAYAAAA5DaaIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAABEBJREFUeJzt3UFu20gARUFykKPKp5LuylkMjMnCsFrPcottV21NBALSyLMI9M9+HMcGADzun1d/AABYlYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoA0Z9Xf4Bt27Z9380m8anjOPZtc1a47/2sbJvzwn1/n5fCN1EAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiEQUAKI/r/4AAHyf4zg+/fm+75M+yc/kmygARCIKAJGIAkAkogAQiSgARCIKAJGIAkDknijAD+Ye6PcS0QlGLjs/6xnWdrlcPv357XYbOgcjfw7rG/l7ftYzfMzrXACIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASAytgAncr1eP/357Xbb3t7eJn0a4B7fRAEgElEAiEQUACIRBYBIRAEgElEAiEQUACIRBYBoP47j1Z9h2/f99R+CUzuOY982Z4X73s/Ktjkv3Pf3eSksFn3RvV9C9n2f+gzndblcPv357Xab+gzn5ryswetcAIhEFAAiEQWASEQBIBJRAIhEFAAiEQWAyNgCSzC2wChjCzzC2MKLzRxJMMiwtpmX3l2wX5/zsgavcwEgElEAiEQUACIRBYBIRAEgElEAiEQUACJjCyzB2AKjjC3wCGMLLzZz3MDYwtpmXlZ3eX59zssavM4FgEhEASASUQCIRBQAIhEFgEhEASASUQCIjC2wBGMLjDK2wCOMLXyTkV8uZo8bGFs4p3uX0Ldt/mV1l+fPy3n5WbzOBYBIRAEgElEAiEQUACIRBYBIRAEgElEAiIwtsARjC4wytsAjjC18kzOOLYwwyDDf6Fk522V1F+xfY/bYwrP+TXBePuZ1LgBEIgoAkYgCQCSiABCJKABEIgoAkYgCQGRsgSUYW2CUsQUeYWwheNYvDqOXlFd8hv+MXIy/Xq93n3nmZfWzPcP/Rs7LiDP+PTsvH/M6FwAiEQWASEQBIBJRAIhEFAAiEQWASEQBIDK2wBKMLTDK2AKPMLYQzB5bmGnWIMP7cz/d7MvzM826YP/+3G/gvPy+8+J1LgBEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABBZLGIJFosYZbGIR1gsCp65WLQii0XjnrlAs6LfuEDzFc7L7zsvXucCQCSiABCJKABEIgoAkYgCQCSiABCJKABExhZYgrEFRhlb4BFfHVvwTRQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAIhEFgEhEASASUQCIRBQAov04/MfvAFD4JgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABCJKABEIgoAkYgCQCSiABD9C2sQ9SsGW5YQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a64c9f8da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=Hit和Miss运算\n",
    "def hitmiss_demo(a, structure1, structure2):\n",
    "    b = morphology.binary_hit_or_miss(a, structure1, structure2)\n",
    "    img = expand_image(a, 100)\n",
    "    return expand_image(b, 255, out=img)\n",
    "\n",
    "img1 = expand_image(a, 255)\n",
    "\n",
    "img2 = hitmiss_demo(a, [[0,0,0],[0,1,0],[1,1,1]], [[1,0,0],[0,0,0],[0,0,0]])\n",
    "img3 = hitmiss_demo(a, [[0,0,0],[0,0,0],[1,1,1]], [[1,0,0],[0,1,0],[0,0,0]])\n",
    "\n",
    "show_image(img1, img2, img3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a64c932fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=使用Hit和Miss进行细线化运算\n",
    "def skeletonize(img):\n",
    "    h1 = np.array([[0, 0, 0],[0, 1, 0],[1, 1, 1]]) #❶\n",
    "    m1 = np.array([[1, 1, 1],[0, 0, 0],[0, 0, 0]]) \n",
    "    h2 = np.array([[0, 0, 0],[1, 1, 0],[0, 1, 0]]) \n",
    "    m2 = np.array([[0, 1, 1],[0, 0, 1],[0, 0, 0]])    \n",
    "    hit_list = [] \n",
    "    miss_list = []\n",
    "    for k in range(4): #❷\n",
    "        hit_list.append(np.rot90(h1, k))\n",
    "        hit_list.append(np.rot90(h2, k))\n",
    "        miss_list.append(np.rot90(m1, k))\n",
    "        miss_list.append(np.rot90(m2, k))    \n",
    "    img = img.copy()\n",
    "    while True:\n",
    "        last = img\n",
    "        for hit, miss in zip(hit_list, miss_list): \n",
    "            hm = morphology.binary_hit_or_miss(img, hit, miss) #❸\n",
    "            # 从图像中删除hit_or_miss所得到的白色点\n",
    "            img = np.logical_and(img, np.logical_not(hm)) #❹\n",
    "        # 如果处理之后的图像和处理前的图像相同，则结束处理\n",
    "        if np.all(img == last): #❺\n",
    "            break\n",
    "    return img\n",
    "\n",
    "a = pl.imread(\"scipy_morphology_demo2.png\")[:,:,0].astype(np.uint8)\n",
    "b = skeletonize(a)\n",
    "#%hide\n",
    "_, (ax1, ax2) = pl.subplots(1, 2, figsize=(9, 3))\n",
    "ax1.imshow(a, cmap=\"gray\", interpolation=\"nearest\")\n",
    "ax2.imshow(b, cmap=\"gray\", interpolation=\"nearest\")\n",
    "ax1.set_axis_off()\n",
    "ax2.set_axis_off()\n",
    "pl.subplots_adjust(0.02, 0, 0.98, 1, 0.02, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 图像分割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "squares = pl.imread(\"suqares.jpg\")\n",
    "squares = (squares[:,:,0] < 200).astype(np.uint8) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "各种距离值 [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n",
      " 24 25 26 27]\n"
     ]
    }
   ],
   "source": [
    "from scipy.ndimage import morphology\n",
    "squares_dt = morphology.distance_transform_cdt(squares)\n",
    "print (\"各种距离值\", np.unique(squares_dt))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "squares_core = (squares_dt > 8).astype(np.uint8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.ndimage.measurements import label, center_of_mass\n",
    "\n",
    "def random_palette(labels, count, seed=1):\n",
    "    np.random.seed(seed)\n",
    "    palette = np.random.rand(count+1, 3)\n",
    "    palette[0,:] = 0\n",
    "    return palette[labels]\n",
    "\n",
    "labels, count = label(squares_core)\n",
    "h, w = labels.shape\n",
    "centers = np.array(center_of_mass(labels, labels, index=range(1, count+1)), np.int)\n",
    "cores = random_palette(labels, count)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "index = morphology.distance_transform_cdt(1-squares_core, \n",
    "                                          return_distances=False, \n",
    "                                          return_indices=True) #❶\n",
    "near_labels = labels[index[0], index[1]] #❷\n",
    "\n",
    "mask = (squares - squares_core).astype(bool)\n",
    "labels2 = labels.copy()\n",
    "labels2[mask] = near_labels[mask] #❸\n",
    "separated = random_palette(labels2, count)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a64c972860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%figonly=矩形区域分割算法各个步骤的输出图像\n",
    "fig, axes = pl.subplots(2, 3, figsize=(7.5, 5.0), )\n",
    "fig.delaxes(axes[1, 2])\n",
    "axes[0, 0].imshow(squares, cmap=\"gray\");\n",
    "axes[0, 1].imshow(squares_dt)\n",
    "axes[0, 2].imshow(squares_core, cmap=\"gray\")\n",
    "ax = axes[1, 0]\n",
    "ax.imshow(cores)\n",
    "center_y, center_x = centers.T\n",
    "ax.plot(center_x, center_y, \"o\", color=\"white\")\n",
    "ax.set_xlim(0, w)\n",
    "ax.set_ylim(h, 0)\n",
    "\n",
    "axes[1, 1].imshow(separated)\n",
    "\n",
    "for ax in axes.ravel():\n",
    "    ax.axis(\"off\")\n",
    "    \n",
    "fig.subplots_adjust(wspace=0.01, hspace=0.01)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
